package com.sakiko.chatmodel.controller;


import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.SystemPromptTemplate;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * projectName: com.sakiko.chatmodel.controller
 *
 * @author: Yang
 * description:
 * time: 2025/8/8 19:43
 */
@RestController
@RequestMapping("model")
public class ChatModelComtroller {

    @Autowired
    private ChatModel chatModel;

    // 1、String call(String message)
    @GetMapping("/call1")
    public String model1(@RequestParam("msg") String message) {
        String res = chatModel.call(message);
        System.out.println("res = " + res);
        return res;
    }

    // 2、ChatResponse call(Prompt prompt)
    @GetMapping("/call2")
    public String model2(@RequestParam("msg") String message) {
        ChatResponse chatResponse = chatModel.call(
                new Prompt(
                        message,
                        OpenAiChatOptions.builder()
                                .model("moonshot-v1-32k")
                                .temperature(0.8)
                                .build()
                )
        );
        String text = chatResponse.getResult().getOutput().getText();
        System.out.println("text = " + text);
        return text;
    }

    // 提示词相关操作
    @GetMapping("prompt")
    public String prompt(@RequestParam("name") String name, @RequestParam("voice") String voice) {
        // 设置用户输入信息
        String userText = """
                给我推荐南昌的三种美食
                """;
        UserMessage userMessage = new UserMessage(userText);
        // 设置系统提示信息
        String systemText = """
                你是一个美食咨询助手，可以帮助用户查询美食信息
                你的名字是{name},
                你应该用你的名字和{voice}的饮食习惯回复用户的请求
                """;
        // 使用 Prompt Template设置信息
        SystemPromptTemplate promptTemplate =
                new SystemPromptTemplate(systemText);
        // 替换占位符
        Message systemMessage =
                promptTemplate.createMessage(Map.of("name", name, "voice", voice));
        // 使用 Prompy封装
        Prompt prompt = new Prompt(List.of(userMessage, systemMessage));
        // 调用 chatModel方法
        ChatResponse response = chatModel.call(prompt);
        return response.getResults()
                .stream()
                .map(x -> x.getOutput().getText())
                .collect(Collectors.joining(""));

    }

}
